iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0
自我挑戰組

CSS 面試趣系列 第 2

Day 2 - 什麼是 Box model?

  • 分享至 

  • xImage
  •  

什麼是 Box model?

Interview Bit 的第 1 題,17題和36題。

定義

讓我們先看 w3Schools 的定義。

The CSS box model is essentially a box that wraps around every HTML element.

也就是說 box model 是圍繞 HTML 元素的一個框框,這一個框框叫做 box model。

內容物

box model 裡面包含 contentpaddingbordermargin

  • content : 下圖藍色框框,為 text 或是 img 本身的 widthheight
  • padding:下圖綠色框框,在 content 的內容周圍加上指定大小的空間
  • border:下圖黃色框框,區隔元素跟元素之間用的,border 最外圍是元素的最外圍
  • margin:下圖橘色框框,元素和元素之間的距離

enter image description here

目的

box model 的目的是藉由 contentpaddingbordermargin 在計算元素 width height

元素 (div, span, ...)

box-sizing 是什麼關係?

常常會聽到 box-sizingbox-model 有關,但是 2 者實際上的關係為何?

先定義什麼是 box-sizing?

以下為 mdn web docs 的定義, box-sizing 為一個元素計算過後的總寬度和總長度的值。

The box-sizing property sets how the total width and height of an element is calculated.

那總高度和總寬度是怎麼算出來的?
會根據 box-sizing 的屬性,總高度和總寬度算法並不一樣。

  • box-sizing: content-box

    元素的 widthheight 設置在 content 層,也就是說 paddingborder 需要另外加在元素上面。於是總高度和總寬度算法為 content + 2 * padding (左右2邊) + 2 * border (左右2邊)

  • box-sizing: border-box

    元素的 widthheight 設置在 border 層,也就是說 paddingborder 已經包含在元素的 widthheight 裡面。於是總高度和總寬度算法為 元素的 widthheight

box model 會影響 box-sizing 所計算出來的大小。

這樣講有點抽象,可以直接看範例。

CodePen 範例

<div class="content-box">Content box</div>
<br>
<div class="border-box">Border box</div>
div {
  /*   寬為 200 px */
  width: 200px;
  /*   高為 100 px */
  height: 100px;
  padding: 20px;
  border: 8px solid red;
  background: yellow;
}

.content-box {
  box-sizing: content-box;
  /* 總寬度: 200px + (2 * 20px) + (2 * 8px) = 256px
     總高度: 100px + (2 * 20px) + (2 * 8px) = 156px
     Content box width: 160px
     Content box height: 80px */
}

.border-box {
  box-sizing: border-box;
  /* 總寬度: 200px
     總高度: 100px
     Content box 寬度: 200px - (2 * 20px) - (2 * 8px) = 144px
     Content box 高度: 100px - (2 * 20px) - (2 * 8px) = 44px
  */
}

Imgur
Content box

Imgur
Border box

box-sizing 預設屬性

box-sizing的預設屬性為 content-box,但在排版上使用 border-box 比較直觀,且較容易計算,不用針對 paddingborder 加加減減,所以有蠻多時候大家都會使用 border-box


參考資料:
【CSS 教學】什麼時候該使用 margin 、padding?前端都該要懂的盒模型!
mdn web docs - box-sizing
CSS Box Model


上一篇
Day 1 - CSS 面試趣!
下一篇
Day 3 - CSS 引用有哪幾種方法?
系列文
CSS 面試趣30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言